////////////////////////////////////////////////////////////////////////////////
/// @file    fsmc_sram.c
/// @author  AE TEAM
/// @brief   THIS FILE PROVIDES ALL THE SYSTEM FUNCTIONS.
////////////////////////////////////////////////////////////////////////////////
/// @attention
///
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
///
/// <H2><CENTER>&COPY; COPYRIGHT MINDMOTION </CENTER></H2>
////////////////////////////////////////////////////////////////////////////////

// Define to prevent recursive inclusion
#define _FSMC_SRAM_C_

// Files includes

#include "stdio.h"
#include "hal_conf.h"
#include "delay.h"
#include "sram.h"


////////////////////////////////////////////////////////////////////////////////
/// @addtogroup MM32_Example_Layer
/// @{

////////////////////////////////////////////////////////////////////////////////
/// @addtogroup FSMC_SRAM
/// @{

////////////////////////////////////////////////////////////////////////////////
/// @addtogroup FSMC_SRAM_Exported_Constants
/// @{



// Private function prototypes
void GPIO_Configuration(void);
////////////////////////////////////////////////////////////////////////////////
/// @brief  Io clock configuration
/// @param  None.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void RCC_ConfigInit(void)
{
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE, ENABLE);
    RCC->AHB3ENR |= 0x01;       //enable FSMCEN
    RCC->APB2ENR |= 0x01 << 14; //open sys_cfg clk
}

////////////////////////////////////////////////////////////////////////////////
/// @brief  FSMC_GPIO congfiguration
/// @param  None
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void SRAM_PIN_GPIO_Confignew(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    /*

    PD14    FMC_D0
    PD15    FMC_D1
    PD0     FMC_D2
    PD1     FMC_D3
    PE7     FMC_D4
    PE8     FMC_D5
    PE9     FMC_D6
    PE10    FMC_D7
    PE11    FMC_D8
    PE12    FMC_D9
    PE13    FMC_D10
    PE14    FMC_D11
    PE15    FMC_D12
    PD8     FMC_D13
    PD9     FMC_D14
    PD10    FMC_D15
    PB7     FMC_NADV
    PE0     FMC_NBL0
    PE1     FMC_NBL1
    PD7     FMC_NE1
    PG9     FMC_NE2
    PG10    FMC_NE3
    PG12    FMC_NE4
    PD4     FMC_NOE
    PD6     FMC_NWAIT
    PD5     FMC_NWE
        */
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE, ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFG, ENABLE);                         //enable sys_cfg clk

    // GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_12);       //PB7    FMC_NADV

    GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_12);       //PD0   FMC_D2   LCD_D2
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_12);       //PD1   FMC_D3   LCD_D3
    // GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_12);       //
    // GPIO_PinAFConfig(GPIOD, GPIO_PinSource3, GPIO_AF_12);       //
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_12);       //PD4   FMC_NOE  LCD_RD
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_12);       //PD5   FMC_NWE  LCD_WR
    // GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_12);       //
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_12);       //PD7   FMC_NE1  LCD_CS
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_12);       //PD8   FMC_D13  LCD_D13
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_12);       //PD9   FMC_D14  LCD_D14
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_12);      //PD10  FMC_D15  LCD_D15
    // GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_12);      //
    // GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_12);      //
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_12);      //PD13  FMC_A18  LCD_RS Command or Data
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_12);      //PD14  FMC_D0   LCD_D0
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_12);      //PD15  FMC_D1   LCD_D1

    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource2, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_12);
    // GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_12);
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_12);       //PE7   FMC_D4   LCD_D4
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_12);       //PE8   FMC_D5   LCD_D5
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_12);       //PE9   FMC_D6   LCD_D6
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_12);      //PE10  FMC_D7   LCD_D7
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_12);      //PE11  FMC_D8   LCD_D8
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_12);      //PE12  FMC_D9   LCD_D9
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_12);      //PE13  FMC_D10  LCD_D10
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_12);      //PE14  FMC_D11  LCD_D11
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_12);      //PE15  FMC_D12  LCD_D12

    //GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_0  | \
                                    GPIO_Pin_1  | \
                                    GPIO_Pin_4  | \
                                    GPIO_Pin_5  | \
                                    GPIO_Pin_7  | \
                                    GPIO_Pin_8  | \
                                    GPIO_Pin_9  | \
                                    GPIO_Pin_10 | \
                                    GPIO_Pin_13 | \
                                    GPIO_Pin_14 | \
                                    GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    //GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_7  | \
                                    GPIO_Pin_8  | \
                                    GPIO_Pin_9  | \
                                    GPIO_Pin_10 | \
                                    GPIO_Pin_11 | \
                                    GPIO_Pin_12 | \
                                    GPIO_Pin_13 | \
                                    GPIO_Pin_14 | \
                                    GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOE, &GPIO_InitStructure);

}
void SRAM_PIN_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE | RCC_AHBENR_GPIOF | RCC_AHBENR_GPIOG, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_12); //NADV
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_12); //DA2
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_12); //DA3
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_12); //SDIO_CMD
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource3, GPIO_AF_12); //CLK
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_12); //NOE
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_12); //NWE
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_12); //NWAIT
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_12); //NE1
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_12); //DA13
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_12); //DA14
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_12); //DA15
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_12); //A16
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_12); //A17
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_12); //A18
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_12); //DA0
    GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_12); //DA1
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_12); //NBL0
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_12); //NBL1
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource2, GPIO_AF_12); //A23
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_12); //A19
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_12); //A20
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_12); //A21
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_12); //A22
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_12); //DA4
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_12); //DA5
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_12); //DA6
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_12); //DA7
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_12); //DA8
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_12); //DA9
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_12); //DA10
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_12); //DA11
    GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_12); //DA12

    GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_12); //A0
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_12); //A1
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource2, GPIO_AF_12); //A2
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource3, GPIO_AF_12); //A3
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource4, GPIO_AF_12); //A4
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource5, GPIO_AF_12); //A5
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_12); //NIORD
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_12); //NREG
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_12); //NIOWR
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_12); //CD
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource10, GPIO_AF_12); //INTR
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource11, GPIO_AF_12); //NIOS16
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource12, GPIO_AF_12); //A6
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource13, GPIO_AF_12); //A7
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource14, GPIO_AF_12); //A8
    GPIO_PinAFConfig(GPIOF, GPIO_PinSource15, GPIO_AF_12); //A9

    GPIO_PinAFConfig(GPIOG, GPIO_PinSource0, GPIO_AF_12); //A10
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource1, GPIO_AF_12); //A11
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource2, GPIO_AF_12); //A12
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource3, GPIO_AF_12); //A13
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource4, GPIO_AF_12); //A14
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource5, GPIO_AF_12); //A15
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource6, GPIO_AF_12); //INT2
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource7, GPIO_AF_12); //INT3
    //GPIO_PinAFConfig(GPIOG,GPIO_PinSource8,GPIO_AF_12);
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource9, GPIO_AF_12); //FMC_NE2/FMC_NCE3
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource10, GPIO_AF_12); //FMC_NCE4_1/FMC_NE3
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_12); //FMC_NCE4_2
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource12, GPIO_AF_12); //FMC_NE4
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_12); //A24
    GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_12); //A25
//  GPIO_PinAFConfig(GPIOG,GPIO_PinSource15,GPIO_AF_12);

    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOE, &GPIO_InitStructure);



    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOF, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOG, &GPIO_InitStructure);



    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

}
//////////////////////////////////////////////////////////////////////////////////
///// @brief  GPIO configuration about FSMC
///// @param  None
///// @retval None.
//////////////////////////////////////////////////////////////////////////////////
//void SRAM_PIN_GPIO_Config(void)
//{
//    GPIO_InitTypeDef GPIO_InitStructure;
//    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA | RCC_AHBENR_GPIOB | RCC_AHBENR_GPIOC | RCC_AHBENR_GPIOD | RCC_AHBENR_GPIOE | RCC_AHBENR_GPIOF | RCC_AHBENR_GPIOG, ENABLE);
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

////    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_12);                       //NADV
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_12);                       //DA2
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_12);                       //DA3
////    GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_12);                       //SDIO_CMD
////    GPIO_PinAFConfig(GPIOD, GPIO_PinSource3, GPIO_AF_12);                       //CLK
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_12);                       //NOE
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_12);                       //NWE
////    GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_12);                       //NWAIT
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_12);                       //NE1
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_12);                       //DA13
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_12);                       //DA14
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_12);                      //DA15
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_12);                      //A16
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_12);                      //A17
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_12);                      //A18
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_12);                      //DA0
//    GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_12);                      //DA1
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_12);                       //NBL0
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_12);                       //NBL1
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource2, GPIO_AF_12);                       //A23
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_12);                       //A19
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_12);                       //A20
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_12);                       //A21
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_12);                       //A22
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_12);                       //DA4
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_12);                       //DA5
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_12);                       //DA6
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_12);                      //DA7
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_12);                      //DA8
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_12);                      //DA9
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_12);                      //DA10
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_12);                      //DA11
//    GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_12);                      //DA12

//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_12);                       //A0
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_12);                       //A1
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource2, GPIO_AF_12);                       //A2
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource3, GPIO_AF_12);                       //A3
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource4, GPIO_AF_12);                       //A4
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource5, GPIO_AF_12);                       //A5
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_12);                       //NIORD
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_12);                       //NREG
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_12);                       //NIOWR
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_12);                       //CD
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource10, GPIO_AF_12);                      //INTR
////    GPIO_PinAFConfig(GPIOF, GPIO_PinSource11, GPIO_AF_12);                      //NIOS16
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource12, GPIO_AF_12);                      //A6
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource13, GPIO_AF_12);                      //A7
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource14, GPIO_AF_12);                      //A8
//    GPIO_PinAFConfig(GPIOF, GPIO_PinSource15, GPIO_AF_12);                      //A9

//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource0, GPIO_AF_12);                       //A10
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource1, GPIO_AF_12);                       //A11
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource2, GPIO_AF_12);                       //A12
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource3, GPIO_AF_12);                       //A13
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource4, GPIO_AF_12);                       //A14
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource5, GPIO_AF_12);                       //A15
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource6, GPIO_AF_12);                       //INT2
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource7, GPIO_AF_12);                       //INT3
//    //GPIO_PinAFConfig(GPIOG,GPIO_PinSource8,GPIO_AF_12);
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource9, GPIO_AF_12);                       //FMC_NE2/FMC_NCE3
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource10, GPIO_AF_12);                      //FMC_NCE4_1/FMC_NE3
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_12);                      //FMC_NCE4_2
////    GPIO_PinAFConfig(GPIOG, GPIO_PinSource12, GPIO_AF_12);                      //FMC_NE4
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_12);                      //A24
//    GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_12);                      //A25
////  GPIO_PinAFConfig(GPIOG,GPIO_PinSource15,GPIO_AF_12);

//    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//    GPIO_Init(GPIOD, &GPIO_InitStructure);

//    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//    GPIO_Init(GPIOE, &GPIO_InitStructure);



//    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//    GPIO_Init(GPIOF, &GPIO_InitStructure);

//    GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_All;
//    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
//    GPIO_Init(GPIOG, &GPIO_InitStructure);



////    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
////    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
////    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
////    GPIO_Init(GPIOB, &GPIO_InitStructure);

//}
////////////////////////////////////////////////////////////////////////////////
/// @brief  SRAM nReset GPIO configuration
/// @param  None
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void SRAM_nRST_Pin_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    //set PC6 as SRAM_nRST Pin
    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}
////////////////////////////////////////////////////////////////////////////////
/// @brief  Reset LCD Controler
/// @param  None
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void SRAM_nRST_Setting(void)
{
    GPIO_SetBits(GPIOC, GPIO_Pin_6);
    DELAY_Ms(1);
    GPIO_ResetBits(GPIOC, GPIO_Pin_6);
    DELAY_Ms(5);
    GPIO_SetBits(GPIOC, GPIO_Pin_6);
    DELAY_Ms(120);
}

void sram_demo(void);
////////////////////////////////////////////////////////////////////////////////
/// @brief   write and read sram
/// @param  None.
/// @retval None.
////////////////////////////////////////////////////////////////////////////////
void sram_writeread(void)
{
//    RCC_ConfigInit();


    SRAM_nRST_Pin_Config();
    SRAM_PIN_GPIO_Config();
    FSMC_SRAM_Init();
    SRAM_nRST_Setting();
    DELAY_Ms(50);                   // delay 50 ms
    sram_demo();


    while(1) {
    }
}

/// @}

/// @}

/// @}
